package com.example.demo.utils;

import com.example.demo.utils.CollectionUtil;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;

import java.net.InetSocketAddress;
import java.util.Map;
import java.util.Objects;

/**
 * Netty工具类
 */
@Slf4j
public final class NettyUtil {

    private NettyUtil() {
    }

    /**
     * 获得客户端地址信息
     */
    public static InetSocketAddress getNetAddress(ChannelHandlerContext ctx) {
        return (InetSocketAddress) ctx.channel().remoteAddress();
    }

    /**
     * 根据context获取到channelId&context的组合
     */
    public static Map.Entry<String, ChannelHandlerContext> getContextEntry(Map<String, ChannelHandlerContext> contexts, ChannelHandlerContext ctx) {
        if (CollectionUtil.isNotEmpty(contexts)) {
            for (Map.Entry<String, ChannelHandlerContext> entry : contexts.entrySet()) {
                if (equalsChannel(ctx, entry.getValue())) {
                    return entry;
                }
            }
        }
        return null;
    }

    /**
     * 比较两个context是否为同一个通道
     */
    public static boolean equalsChannel(ChannelHandlerContext ctx1, ChannelHandlerContext ctx2) {
        return ctx1 != null && ctx2 != null && Objects.equals(ctx1, ctx2) && Objects.equals(ctx1.channel(), ctx2.channel());
    }
}
